package cn.kgc.util;

import cn.hutool.core.util.RandomUtil;
import cn.kgc.config.MiniIoConfig;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

/**
 * @author wangyue
 * @version 1.0
 * 文件管理工具类
 */
@Component
public class FileManager {
    @Resource
    private MiniIoConfig miniIoConfig;

    /**
     * 创建MinioClient对象
     */
    private MinioClient minioClient() {
        return MinioClient.builder()
                //指定账号密码
                .credentials(miniIoConfig.getAccessKey(), miniIoConfig.getSecretKey())
                //指定minio服务器地址
                .endpoint(miniIoConfig.getEndpoint())
                .build();
    }

    /**
     * 上传文件
     * @param multipartFile 文件
     * @param filePath  保存在minio的文件路径
     * @return   通过返回的地址用户可以浏览到文件的内容
     * @throws Exception
     */
    public String uploadFile(MultipartFile multipartFile, String filePath) throws Exception{
        //创建client对象
        MinioClient minioClient = minioClient();
        //上传的文件保存到minio中的文件路径
        //face  ==> face/78453492834820479568212334tou.png
        String fileName = filePath+"/"+System.currentTimeMillis() +
                RandomUtil.randomString(5) + multipartFile.getOriginalFilename();
        //上传文件时需要的参数
        PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                //指定的文件名
                .object(fileName)
                //上传的文件类型
                .contentType(multipartFile.getContentType())
                //使用输入流读取multipartFile文件的内容
                .stream(multipartFile.getInputStream(), multipartFile.getSize(), -1)
                //桶名(文件夹名  hire)
                .bucket(miniIoConfig.getBucketName())
                .build();
        //上传文件
        minioClient.putObject(putObjectArgs);
        //将用户上传的文件访问路径返回给用户
        //http://192.168.8.106:9001/hire/face/78453492834820479568212334tou.png
        return miniIoConfig.getEndpoint()+"/"+miniIoConfig.getBucketName()+"/"+fileName;
    }
}
